﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Clinica_Frba.UserInterface.Registrar_Agenda
{
    public partial class RegistrarAgenda : Form
    {

        private string prof_username;
        private bool existente_en_base;
        private string string_connection;
        
        public RegistrarAgenda(string username_profesional,string conexion)
        {
            InitializeComponent();
            this.prof_username = username_profesional;
            this.string_connection = conexion;
        }

        private bool agenda_existe()
        {
            bool resultado = false;
            string consulta = "SELECT agen_prof_id FROM vacuna_gdd.Agenda, vacuna_gdd.Profesional"
                              +" WHERE agen_prof_id=prof_id AND prof_username='"+this.prof_username+"'";

            return resultado;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // FALTARÍA LA VALIDACION DE SI EL RANGO YA ESTA CONTENIDO POR OTRO AGREGADO ANTES
            // POR AHORA SE AGREGA LA VALIDACIÓN DE QUE EL MISMO RANGO NO ESTÉ YA CARGADO.
            DateTime fechaDesde = new DateTime();
            DateTime.TryParse(this.desde_dateTimePicker.Text, out fechaDesde);

            DateTime fechaHasta = new DateTime();
            DateTime.TryParse(this.hasta_dateTimePicker.Text, out fechaHasta);

            if (fechaDesde.CompareTo(fechaHasta) == 0)
            {
                MessageBox.Show("Las fechas no pueden ser las mismas.");
                return;
            }
            else
            {
                if (fechaDesde.CompareTo(fechaHasta) == 1)
                {
                    MessageBox.Show("La fechas 'desde' no puede ser posterior a la fecha 'hasta'");
                    return;
                }
            }

            string rango = this.desde_dateTimePicker.Text + " - " + this.hasta_dateTimePicker.Text;
            if (this.rangos_fechas_listbox.Items.Count < 15 && !this.rangos_fechas_listbox.Items.Contains(rango))
            {
                this.rangos_fechas_listbox.Items.Add(rango);
                if (this.rangos_fechas_listbox.Items.Count == 15)
                {
                    this.button1.Enabled = false;
                }
            }
            else
            {
                if (this.rangos_fechas_listbox.Items.Count >= 15)
                {
                    MessageBox.Show("Capacidad máxima alcanzada"); //Este mensaje no debería llegar a aparecer
                }
                else
                {
                    MessageBox.Show("Rango de fechas ya existente");
                }
            }
        }

        private void cancelar_btn_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.rangos_fechas_listbox.Items.Remove(this.rangos_fechas_listbox.SelectedItem);
            if (this.rangos_fechas_listbox.Items.Count < 15)
                this.button1.Enabled = true;
        }

        private void aceptar_btn_Click(object sender, EventArgs e)
        {
            string serializarHorarios = "";
            string serializarFechas = "";
            string domingoInhabilitado="00000000";
            serializarHorarios = desde_lun_hr_cmbox.Text + desde_lun_min_cmbox.Text + hasta_lun_hr_cmbox.Text + hasta_lun_min_cmbox.Text +
                desde_mar_hr_cmbox.Text + desde_mar_min_cmbox.Text + hasta_mar_hr_cmbox.Text + hasta_mar_min_cmbox.Text +
                desde_mie_hr_cmbox.Text + desde_mie_min_cmbox.Text + hasta_mie_hr_cmbox.Text + hasta_mie_min_cmbox.Text +
                desde_jue_hr_cmbox.Text + desde_jue_min_cmbox.Text + hasta_jue_hr_cmbox.Text + hasta_jue_min_cmbox.Text +
                desde_vie_hr_cmbox.Text + desde_vie_min_cmbox.Text + hasta_vie_hr_cmbox.Text + hasta_vie_min_cmbox.Text +
                desde_sab_hr_cmbox.Text + desde_sab_min_cmbox.Text + hasta_sab_hr_cmbox.Text + hasta_sab_min_cmbox.Text+domingoInhabilitado;

            foreach (string rangoFecha in this.rangos_fechas_listbox.Items)
            {
                serializarFechas += rangoFecha.Replace("/", "").Replace(" - ","");
            }
            insertarAgenda(serializarFechas, serializarHorarios);

        }

        private void insertarAgenda(string fechas, string horarios)
        {
            string conString = this.string_connection;            
            string consulta = "";
            if (this.existente_en_base)
            {
                consulta = "UPDATE vacuna_gdd.Agenda SET agen_rango_fechas='"+fechas+"', "
                +"agen_rango_horarios='"+horarios+"' WHERE agen_prof_id=(SELECT agen_prof_id "
                +"FROM vacuna_gdd.Agenda,vacuna_gdd.Profesional WHERE agen_prof_id=prof_id AND prof_username='"
                +this.prof_username+"')";
            }
            else
            {
                consulta = "INSERT INTO vacuna_gdd.Agenda(agen_prof_id, agen_rango_fechas, agen_rango_horarios) "
                    + "VALUES( (SELECT prof_id FROM vacuna_gdd.Profesional WHERE prof_username='"
                    + this.prof_username + "'), '" + fechas + "','" + horarios + "')";
            }
            Console.WriteLine("Consulta a ejecutar: " + consulta);
            using (SqlConnection cn = new SqlConnection(conString))
            {
                SqlCommand cmd = new SqlCommand(consulta, cn);
                try
                {
                    cmd.ExecuteNonQuery();                    
                    MessageBox.Show("Agenda actualizada. Ahora podrá asignar turnos.");
                    this.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("No se pudo actualizar la agenda. Error: " + ex.Message.ToString());
                }
            }
            

            // Aca se ejecuta la query
        }

        private void RegistrarAgenda_Load(object sender, EventArgs e)
        {
            // Aca deberia ver si el profesional tiene cargada alguna agenda y
            // si tiene cargada agenda, seteo la propiedad existente_en_base en true y cargo el formulario con los datos
            
        }

        
    }
}
